/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002-2006 * Sleepycat Software. All rights reserved. * * $Id: DbEnvState.java,v 1.1 2006/05/06 09:00:24 ckaestne Exp $ */ package com.sleepycat.je.dbi; import com.sleepycat.je.DatabaseException; /** * DbEnvState implements a typesafe enumeration of environment states * and does state change validation. */ class DbEnvState { private static final boolean DEBUG = false; private String name; /* Valid environment states. */ public static final DbEnvState INIT = new DbEnvState("initialized"); public static final DbEnvState OPEN = new DbEnvState("open"); public static final DbEnvState CLOSED = new DbEnvState("closed"); public static final DbEnvState INVALID = new DbEnvState("invalid"); /* Valid previous states, for state transition checking. */ public static final DbEnvState[] VALID_FOR_OPEN = {INIT, CLOSED}; public static final DbEnvState[] VALID_FOR_CLOSE = {INIT, OPEN, INVALID}; public static final DbEnvState[] VALID_FOR_REMOVE = {INIT, CLOSED}; DbEnvState(String name) { this.name = name; } public String toString() { return name; } /* Check for valid state transitions. */ void checkState(DbEnvState [] validPrevStates, DbEnvState newState) throws DatabaseException { if (DEBUG) { System.out.println("newState = " + newState + " currentState = " + name); } boolean transitionOk = false; for (int i = 0; i < validPrevStates.length; i++) { if (this == validPrevStates[i]) { transitionOk = true; break; } } if (!transitionOk) { throw new DatabaseException("Can't go from environment state " + toString() + " to " + newState.toString()); } } }